/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;


import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import modelo.Articulo;
import modelo.Proveedores;

/**
 *
 * @author MarioPT
 */
public class BBDDgroup2 {
    private java.sql.Connection c;

    public BBDDgroup2() throws SQLException, ClassNotFoundException {
        openconnection();
    }
    
    public void openconnection() throws SQLException, ClassNotFoundException {
                    try {
            Class.forName("com.mysql.jdbc.Driver");
            c = DriverManager.getConnection("jdbc:mysql://localhost/proyectosge", "root", "");
        } catch (ClassNotFoundException ex) {
            System.err.println("ERROR. DBManager(). Error al cargar el driver JDBC de MYSQL");
            throw ex;
        } catch (SQLException ex) {
            System.err.println("ERROR. DBManager(). Error de SQL");
            throw ex;
        }
}
    /**
     * 
     * @param cx cadena de conexión
     * @param d driver
     */
    /**
     * 
     * @param cx cadena de conexión
     * @param d driver
     */
    public void closeConnection() throws java.sql.SQLException {
        try {
            c.close();
        } catch (SQLException ex) {
            System.err.println("ERROR. DBManager.closeConnection(). Error al cerrar la conexion");
            throw ex;
        }
    }
    /*public Connection getConexion(){
            return c;
    }*/
  public ArrayList<Proveedores> getProveedores() throws java.sql.SQLException {
        ArrayList<Proveedores> alProveedores = new ArrayList();
        Proveedores p;
        try {
            java.sql.Statement s = c.createStatement();
            String sql = "select * from proveedor";
            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                p = new Proveedores(rs.getInt("codProveedor"), rs.getString("nomProveedor"),rs.getString("cif"),rs.getString("direccion"),rs.getInt("CP"), rs.getString("poblacion"),rs.getString("pais"));
                alProveedores.add(p);
            }
        } catch (SQLException ex) {
            System.err.println("ERROR. BBDD.getProveedores(). Error de SQL.");
            throw ex;
        }
        return alProveedores;
    }
       public void addProveedores(Proveedores p) throws java.sql.SQLException {
        try {
            java.sql.Statement s = c.createStatement();
            String sql = "insert into proveedor(codProveedor, nomProveedor , cif, direccion , CP , poblacion, pais) values (" + p.getCodigo_Proveedor() + ",'" + p.getNombre_Proveedor() + "'," + p.getCif() + "," + p.getDireccion() + ",'" + p.getcPostal() + "'" + p.getPoblacion() + ",'" + p.getPais() + "')";
            System.out.println(sql);
            s.executeUpdate(sql);
        } catch (SQLException ex) {
            System.err.println("ERROR. BBDD.addProveedores. Error de SQL.");
            throw ex;
        }
    }
        public void deleteProveedores(Proveedores p) throws SQLException {
        this.getProveedores();
        try {
            Statement s = c.createStatement();
            String sql = "delete from proveedor where modelo='" + p.getCodigo_Proveedor() + "'";
            System.out.println(sql);
            s.executeUpdate(sql);
        } catch (SQLException e) {
            System.err.println("Error conexion borrar proveedor");
            throw e;
        }
    }
        public ArrayList<Articulo> getarticulosfilter(Articulo filter) throws SQLException{
            /*
                Devuelve un arrayList con los articulos de la BBDD
                que cumplen los filtros especificados en el objeto recibido
                Le pasamos un filtro que es un objeto tipo Articulo con las especificaciones de los campos del jpanelstock
                Creador Mario Perez
            */
            ArrayList<Articulo> data = new ArrayList();
            Articulo a;
            Statement s = c.createStatement();
 
            String widart;
            String widalmacen;
            String wdescripcion;
            String wcantidad;
            //campo de id articulo
            if (filter.getIdArticulo()==-1) {
                widart="";
            }else{
                widart=" WHERE `idArticulo` = "+filter.getIdArticulo();
            }
            //campo de id almacen
            if (filter.getIdAlmacen()==-1) {
                widalmacen="";
            }else{
                if (filter.getIdArticulo()==-1) {
                widalmacen=" WHERE `idAlmacen` = "+filter.getIdAlmacen();}else{
                    widalmacen=" AND `idAlmacen` = "+filter.getIdAlmacen();
                }
            }
            //campo de descripcion
            if (filter.getDescripcion().isEmpty()) {
                wdescripcion="";
            }else{
                if (filter.getIdAlmacen()==-1 && filter.getIdArticulo()==-1) {
                wdescripcion=" WHERE `descripcion` LIKE '%"+filter.getDescripcion()+"%'";}else{
                    wdescripcion=" AND `descripcion` LIKE '%"+filter.getDescripcion()+"%'";
                }
            }
            //Cantidad
            if (filter.getCantidad()==-1) {
                wcantidad="";
            }else{
                if (filter.getIdAlmacen()==-1 && filter.getIdArticulo()==-1 && filter.getDescripcion().isEmpty()) {
                wcantidad=" WHERE `cantidad` = "+filter.getCantidad();}else{
                    wcantidad=" AND `cantidad` = "+filter.getCantidad();
                }
            }
            /*EJECUTAMOS
                LA
                    CONSULTA*/
            String sql="SELECT * FROM articulos"+widart+widalmacen+wdescripcion+wcantidad;
            
            System.out.println(sql);
            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                a = new Articulo(
                        rs.getInt("idArticulo"),
                        rs.getInt("idAlmacen"), 
                        rs.getString("descripcion"),
                        rs.getInt("cantidad"),
                        rs.getInt("precio"));
                data.add(a);
            }
        return data;
    }
            
            
    public ArrayList<Articulo> getarticulos(){
            /*
                Devuelve un arrayList con todos los articulos
                Creador Mario Perez
            */
            ArrayList<Articulo> data = new ArrayList();
            Articulo a;        
        try {
            Statement s = c.createStatement();
            String sql = "select * from ARTICULOS";
            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                a = new Articulo(rs.getInt("idArticulo"), rs.getInt("idAlmacen"), rs.getString("descripcion"), rs.getInt("cantidad"), rs.getInt("precio"));
                data.add(a);
            }
        } catch (SQLException ex) {
            System.err.println("ERROR. BaseDatos.getarticulos(). Error de SQL." + ex);
            System.out.println("ERROR. BaseDatos.getarticulos(). Error de SQL." + ex);
        }
        return data;
    }
    //
    public int getPedidosfromArticulo(Articulo articulo) throws SQLException {
        //SELECT * FROM `lineasped` WHERE `idArticulo` = x
        String sql="SELECT * FROM `lineasped` WHERE `idArticulo` = "+articulo.getIdArticulo();
            int pedidos=0;
            System.out.println(sql);
            Statement s = c.createStatement();
            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                pedidos=rs.getInt("cantidad");
                }
        return pedidos;
    }
}
